const fs = require('fs');
const http = require('http');  // deno node
const path = require('path');
// v8 引擎
console.log(global ? 'nodejs' : window ? '浏览器' : '不知');
let entry = './assets/09_plugin.js';
let filename = path.parse(entry).base;
// 引入插件
const MyPlugin = require('./myplugins/01_test_plugin');
const MyPlugin2 = require('./myplugins/02_optimize.js');
module.exports = {
    entry: entry, // 单入口
    // 18年webpack,有的应用是多单页应用
    // 多入口
    // entry:{ a:'xxx',b:'xxx'}
    output: {
        path: path.resolve('./generate'),
        filename: filename
    },
    // 配置不同文件处理的loader
    module: {
        rules: [
            // 处理css
            {
                test: /\.css$/,
                use: [// 顺序是逆序 : 底层会使用抽象语法树AST
                    // background-color  aquamarine
                    { loader: 'style-loader' },
                    { loader: 'css-loader' }
                ]
            },
            // 处理less
            {
                test: /\.less$/,
                use: [
                    { loader: 'style-loader' },
                    { loader: 'css-loader' },
                    { loader: 'autoprefixer-loader' },
                    { loader: 'less-loader' }
                ]
            },
            // 处理Png
            {
                test: /\.(png|jpg|gif|ttf)$/,
                use: [
                    {
                        loader: 'url-loader', options: {
                            publicPath: '/generate/',
                            limit: 2048, // base64可以减少一次图片请求，
                            // 但是会在原图基础上扩大50%
                            name: 'imgs/[name].[hash:6].[ext]'
                        }
                    }
                ]
            },
            // 测试处理js 模拟一个babel解析代码生成es5
            {
                test: /\.js$/,
                use: [
                    {
                        loader: path.resolve('./myloaders/01_test_loader.js'),
                        options: {
                            a: 1, b: 2
                        }
                    }
                ]
            }
        ]
    },
    // 加入插件(数组的执行顺序，是从前向后)
    plugins: [
        // 自定义插件写在数组的最后，不干涉其他插件的运行，最后执行个性化的时间点
        // new MyPlugin({ c: 1, d: 2 }),
        new MyPlugin2({ f: 1 }),
    ],
}